/*
 * Powered By [rapid-framework]
 * Web Site: http://www.rapid-framework.org.cn
 * Google Code: http://code.google.com/p/rapid-framework/
 * Since 2008 - 2018
 */

package com.mianle.userapi.mapper;

import com.github.pagehelper.Page;
import com.mianle.userapi.model.WalletUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


@Mapper
public interface WalletUserMapper extends BaseMapper<WalletUser> {
    /**
     * 根据用户id查询用户信息
     *
     * @param walletUser
     * @return
     */
    WalletUser selectWalletUser(@Param("item") WalletUser walletUser);

    /**
     * 获取首页用户显示信息
     *
     * @param userId
     * @return
     */
    WalletUser getIndexUserInfo(@Param("userId") Long userId);

    /**
     * 获取用户个人中心信息
     *
     * @param userId
     * @return
     */
    WalletUser getPersonCenterInfo(@Param("userId") Long userId);

    /**
     * 修改用户电话号码
     *
     * @param
     * @return
     */
    Integer upadateMobilePhone(@Param("item") WalletUser walletUser);

    /**
     * 获取用户mlc_piont和转换率
     *
     * @param id
     * @param coinName
     * @return
     */
    Map<String, Object> getFeeRateAndMlcPoint(@Param("id") Long id, @Param("name") String coinName);

    /**
     * 转账获取用户信息
     *
     * @param id
     * @return
     */
    Map<String, Object> getExtractUserInfo(@Param("id") Long id);


    Integer updUsermessge(@Param("item") WalletUser userInfo);

    /**
     * 获取用户信息列表
     *
     * @param country     国家
     * @param userName    用户名称
     * @param mobilePhone 手机号码
     * @param idCardNo    身份证
     * @return
     */
    Page<Map<String, Object>> getUserList(@Param("country") String country,
                                          @Param("userName") String userName,
                                          @Param("mobilePhone") String mobilePhone,
                                          @Param("idCardNo") String idCardNo,
                                          @Param("levelId") Integer levelId
    );

    /**
     * 删除用户
     *
     * @param ids
     * @return
     */
    int delUsers(List<Integer> ids);

    /**
     * 获取用户详情
     *
     * @param id
     * @return
     */
    Map<String, Object> getUserDetail(@Param("id") Integer id);

    /**
     * 获取用户资金详情
     *
     * @param id
     * @param changeType
     * @return
     */
    Page<Map<String, Object>> getFundsDetail(@Param("id") Integer id, @Param("changeType") Integer changeType);

    /**
     * 获取集合
     *
     * @return
     */
    List<WalletUser> getList();

    /**
     * 查询系统用户信息
     *
     * @return
     */
    Map<String, Object> systemInfo();

    /**
     * 根据手机号码查询用户信息
     *
     * @return
     */
    WalletUser findUserByMobilePhone(@Param("mobilePhone") String mobilePhone);

    /**
     * 根据邀请码查询用户信息
     *
     * @return
     */
    WalletUser findUserByShareCode(@Param("shareCode") String shareCode);

    /**
     * 根据邀请码查询用户信息
     *
     * @return
     */
    WalletUser findUserByWalletAddr(@Param("walletAddr") String walletAddr);

    /**
     * 用户转账转出
     *
     * @param walletUser
     * @return
     */
    int userTransferOut(@Param("item") WalletUser walletUser);

    /**
     * 用户转账转入
     *
     * @param walletUser
     * @return
     */
    int userTransferIn(@Param("item") WalletUser walletUser);

    /**
     * 用户释放积分加余额
     *
     * @param rebate
     * @return
     */
    int releaseUserBace(@Param("rebate") BigDecimal rebate, @Param("id") Long id);

    /**
     * 系统用户释放余额加积分
     *
     * @param rebate
     * @param id
     * @return
     */
    int releaseSysBace(@Param("rebate") BigDecimal rebate, @Param("id") Long id);

    /**
     * 用户众链兑换积分，减众链加积分
     *
     * @param walletUser
     * @return
     */
    int userExchange(@Param("item") WalletUser walletUser);

    /**
     * 系统众链兑换积分，加众链减积分
     *
     * @param walletUser
     * @return
     */
    int systemExchange(@Param("item") WalletUser walletUser);

    /**
     * 用户场外订单总数加1
     *
     * @param userId
     * @return
     */
    int outsideTotalAddOne(@Param("userId") int userId);

    /**
     * 用户当前币的余额
     *
     * @param coinName
     * @param userId
     * @return
     */
    BigDecimal getCurrCoinBalance(@Param("coinName") String coinName, @Param("userId") int userId);

    /**
     * 用户当前币的冻结金额
     *
     * @param coinNamed
     * @param userId
     * @return
     */
    BigDecimal getCurrCoinFreezeNum(@Param("coinNamed") String coinNamed, @Param("userId") int userId);

    /**
     * 更新账户当前币的余额和冻结额
     *
     * @param coinBalance
     * @param coinFreezeNum
     * @param userId
     * @param coinName
     * @param coinNamed
     * @return
     */
    int upCurrCoinData(@Param("coinBalance") BigDecimal coinBalance, @Param("coinFreezeNum") BigDecimal coinFreezeNum, @Param("userId") int userId, @Param("coinName") String coinName, @Param("coinNamed") String coinNamed);

    /**
     * 更新当前币的余额
     *
     * @param coinBalance
     * @param userId
     * @param coinName
     * @return
     */
    int upCoinBalance(@Param("coinBalance") BigDecimal coinBalance, @Param("userId") int userId, @Param("coinName") String coinName);

    /**
     * 获取交易开关状态
     *
     * @param userId
     * @return
     */
    int getTradingSwitch(@Param("userId") int userId);

    /**
     * 更新交易开关状态
     *
     * @param tradingSwitch
     * @param userId
     * @return
     */
    int upTradingSwitch(@Param("tradingSwitch") int tradingSwitch, @Param("userId") int userId);

    WalletUser selectSystem(@Param("id") int id);
}
